// Copyright 2013 Ronald Schlenker, www.technewlogic.de.
// 
// This file is part of Byond.
// 
// Byond is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 2 of the License, or
// (at your option) any later version.
// 
// Byond is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
// 
// You should have received a copy of the GNU General Public License
// along with Byond.  If not, see <http://www.gnu.org/licenses/>.

using Mvvm;
using Byond.Messages;
using Utils.DialogManagement;
using Utils.Messaging;

namespace Byond.EnsembleLibrary.ViewModels
{
	public class ItemViewModel : ViewModelBase
	{
		private readonly EnsembleManager _ensembleManager;
		private readonly Ensemble _ensemble;
		private readonly IDialogManager _dialogManager;

		public event MessageEventHandler SendMessage;

		public string Name { get { return Ensemble.Name; } }
		public Ensemble Ensemble { get { return _ensemble; } }

		public bool IsActive
		{
			get { return false; }
			//get { return _ensembleManager.ActiveEnsemble == Ensemble; }
		}

		public bool IsShown
		{
			get { return _ensembleManager.EditingEnsemble == Ensemble; }
		}

		public void HandleMessage(EnsembleActivatedMessage message)
		{
			OnPropertyChanged("IsActive");
		}

		public void HandleMessage(EnsembleShownMessage message)
		{
			OnPropertyChanged("IsShown");
		}

		public void Show()
		{
			SendMessage(new ShowEnsembleRequest(Ensemble));
		}

		public void Activate()
		{
			SendMessage(new ActivateEnsembleRequest(Ensemble));
		}

		public void Delete()
		{
			var dialog = _dialogManager.CreateMessageDialog(
				string.Empty,
				"Really delete this ensemble?",
				DialogMode.YesNo);
			dialog.Yes = () => SendMessage(new DeleteEnsembleRequest(Ensemble));
			dialog.Show();
		}
	}
}
